// 导入 http 模块
import http from 'wechat-http'

 //配置接口基础路径
http.baseURL = 'https://live-api.itheima.net'

//配置请求拦截器
http.intercept.request = (config) => {
  // 统一携带token
  const token = getApp().token
  // 注意：config.header.Authorization = token  这种方式会报错
  if(token) {
    config.header = {
      Authorization: token,
      ...config.header
    }
  }
  return config
}

 // 配置响应拦截器
http.intercept.response = async (res) => {
  // 过滤接口返回的数据，数据剥离

  if(res.statusCode === 401) {
    // 当401时，刷新token
    // console.log(res)

    //注意：不能让refreshToken那个接口走下面的代码
  if(res.config.url.endsWith('refreshToken')){
    // 获取页面栈、拿到当前页面
    const pageStack = getCurrentPages()
    const current = pageStack[pageStack.length - 1]
    const url = current.route

    // 如果发现refreshToken 401失效，跳转登录页
   return wx.redirectTo({
      url:'/pages/login/index?backTo=/' + url
    })
  }

  // 发送刷新token请求
   const res2 = await http({
      url: '/refreshToken',
      method: 'post',
      header: {
        Authorization:getApp().refresh_token
      }
    })

    // 将获取到的新的token，重新存储
    getApp().setToken(res2.data.token,res2.data.refreshToken)

    // 无感刷新 => 就是将错误的请求，重新用正确的token再发一遍
    // res.config 就是这次错误请求的所有配置项
    // return 出去，发完请求截止
   return http({
      ...res.config,  //这里配置项，请求头是错的
      header:{
        Authorization: getApp().token //重新给请求头更新后的token
      }
    })
  }

  return res.data
}

 //挂载方法到全局
wx.http = http

// 模块导出
export default http
